package com.pingbu.common.utils;

import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

public class PbTimeUtils {

    public static String formatTime(Date dt,String pattern){
        if(StringUtils.isEmpty(pattern ) ){
            pattern = "yyyy-MM-dd HH:mm:ss";
        }
        if(dt == null){
            dt=new Date();
        }

        try {
            DateFormat sdf = new SimpleDateFormat(pattern);

            return sdf.format(dt);
        }catch (Exception err){
            return null;
        }
    }

    public static Date convertDate(String strDate,String pattern){
        if(StringUtils.isEmpty(strDate)){
            return null;
        }
        if(StringUtils.isEmpty(pattern ) ){
            pattern = "yyyy-MM-dd HH:mm:ss";
        }
        DateFormat sdf =new SimpleDateFormat(pattern);
        try {
            return sdf.parse(strDate);
        } catch (ParseException e) {
            e.printStackTrace();
            return null;
        }
    }


    /**
     * 返回月初 0点
     * @param dt
     * @return
     */
    public static Date getMonthMin(Date dt){
        if(dt==null){
            dt=new Date();
        }

        DateTime fdt=new DateTime(dt);
        return  fdt.dayOfMonth().withMinimumValue().withMillisOfDay(0).toDate();
    }

    public static Date getMonthMax(Date dt){
        if(dt==null){
            dt=new Date();
        }

        DateTime fdt=new DateTime(dt);
        return fdt.dayOfMonth().withMaximumValue().plusDays(1).withMillisOfDay(0).minusSeconds(1).toDate();
    }

    public static DateTime getMonthMin(DateTime dt){
        if(dt==null){
            dt=DateTime.now();
        }

        return dt.dayOfMonth().withMinimumValue().withMillisOfDay(0);
    }

    public static DateTime getMonthMax(DateTime dt){
        if(dt==null){
            dt=DateTime.now();
        }

        return dt.dayOfMonth().withMaximumValue().plusDays(1).withMillisOfDay(0).minusSeconds(1);
    }

    public static Date nextMonthmin(Date dt){
        if(dt==null){
            return null;
        }

//        Date dt2 = getMonthMax(dt);

        DateTime fdt2 = new DateTime(dt);
        fdt2 = fdt2.plusMonths(1);
        return getMonthMin( fdt2.toDate()) ;
    }

    public static Date prevMonthmin(Date dt){
        if(dt==null){
            return null;
        }

//        Date dt2 = getMonthMax(dt);

        DateTime fdt2 = new DateTime(dt);
        fdt2 = fdt2.plusMonths(-1);
        return getMonthMin( fdt2.toDate()) ;
    }


}
